فارسی

با استفاده از تاییدهای const در تایپ‌اسکریپت، استنتاج نوع تغییرناپذیر را فعال کرده و ایمنی و پیش‌بینی‌پذیری کد خود را افزایش دهید. نحوه استفاده موثر از آن را با مثال‌های عملی بیاموزید.

تاییدهای const در تایپ‌اسکریپت: استنتاج نوع تغییرناپذیر برای کدی استوار

تایپ‌اسکریپت، که یک بالامجموعه از جاوااسکریپت است، تایپ‌دهی ایستا را به دنیای پویای توسعه وب می‌آورد. یکی از ویژگی‌های قدرتمند آن، استنتاج نوع (type inference) است، که در آن کامپایلر به طور خودکار نوع یک متغیر را استنباط می‌کند. تاییدهای Const، که در تایپ‌اسکریپت نسخه ۳.۴ معرفی شدند، استنتاج نوع را یک گام فراتر می‌برند و به شما امکان می‌دهند تا تغییرناپذیری را اعمال کرده و کدی استوارتر و قابل پیش‌بینی‌تر ایجاد کنید.

تاییدهای Const چه هستند؟

تاییدهای Const راهی برای اطلاع دادن به کامپایلر تایپ‌اسکریپت هستند که شما قصد دارید یک مقدار تغییرناپذیر باشد. آن‌ها با استفاده از سینتکس as const پس از یک مقدار لیترال یا عبارت اعمال می‌شوند. این به کامپایلر دستور می‌دهد تا محدودترین نوع ممکن (لیترال) را برای عبارت استنتاج کرده و تمام خصوصیات را به عنوان readonly علامت‌گذاری کند.

در اصل، تاییدهای const سطح بالاتری از ایمنی نوع را نسبت به تعریف ساده یک متغیر با const فراهم می‌کنند. در حالی که const از انتساب مجدد خود متغیر جلوگیری می‌کند، مانع از تغییر شیء یا آرایه‌ای که متغیر به آن ارجاع می‌دهد نمی‌شود. تاییدهای Const از تغییر خصوصیات شیء نیز جلوگیری می‌کنند.

مزایای استفاده از تاییدهای Const

مثال‌های عملی

مثال ۱: استفاده پایه با یک لیترال

بدون تایید const، تایپ‌اسکریپت نوع message را به عنوان string استنتاج می‌کند:


const message = "Hello, World!"; // نوع: string

با تایید const، تایپ‌اسکریپت نوع را به عنوان رشته لیترال "Hello, World!" استنتاج می‌کند:


const message = "Hello, World!" as const; // نوع: "Hello, World!"

این به شما امکان می‌دهد تا از نوع رشته لیترال در تعاریف نوع دقیق‌تر و مقایسه‌ها استفاده کنید.

مثال ۲: استفاده از تاییدهای Const با آرایه‌ها

یک آرایه از رنگ‌ها را در نظر بگیرید:


const colors = ["red", "green", "blue"]; // نوع: string[]

حتی اگر آرایه با const تعریف شده باشد، شما هنوز هم می‌توانید عناصر آن را تغییر دهید:


colors[0] = "purple"; // بدون خطا
console.log(colors); // خروجی: ["purple", "green", "blue"]

با افزودن تایید const، تایپ‌اسکریپت آرایه را به عنوان یک تاپل از رشته‌های فقط-خواندنی استنتاج می‌کند:


const colors = ["red", "green", "blue"] as const; // نوع: readonly ["red", "green", "blue"]

اکنون، تلاش برای تغییر آرایه منجر به خطای تایپ‌اسکریپت خواهد شد:


// colors[0] = "purple"; // خطا: امضای ایندکس در نوع 'readonly ["red", "green", "blue"]' فقط اجازه خواندن می‌دهد.

این تضمین می‌کند که آرایه colors تغییرناپذیر باقی بماند.

مثال ۳: استفاده از تاییدهای Const با اشیاء

مشابه آرایه‌ها، اشیاء نیز می‌توانند با تاییدهای const تغییرناپذیر شوند:


const person = {
  name: "Alice",
  age: 30,
}; // نوع: { name: string; age: number; }

حتی با const، شما هنوز هم می‌توانید خصوصیات شیء person را تغییر دهید:


person.age = 31; // بدون خطا
console.log(person); // خروجی: { name: "Alice", age: 31 }

افزودن تایید const خصوصیات شیء را readonly می‌کند:


const person = {
  name: "Alice",
  age: 30,
} as const; // نوع: { readonly name: "Alice"; readonly age: 30; }

اکنون، تلاش برای تغییر شیء منجر به خطای تایپ‌اسکریپت خواهد شد:


// person.age = 31; // خطا: نمی‌توان به 'age' مقدار تخصیص داد زیرا یک خصوصیت فقط-خواندنی است.

مثال ۴: استفاده از تاییدهای Const با اشیاء و آرایه‌های تودرتو

تاییدهای Const می‌توانند بر روی اشیاء و آرایه‌های تودرتو اعمال شوند تا ساختارهای داده عمیقاً تغییرناپذیر ایجاد کنند. مثال زیر را در نظر بگیرید:


const config = {
  apiUrl: "https://api.example.com",
  endpoints: {
    users: "/users",
    products: "/products",
  },
  supportedLanguages: ["en", "fr", "de"],
} as const;

// نوع:
// {
//   readonly apiUrl: "https://api.example.com";
//   readonly endpoints: {
//     readonly users: "/users";
//     readonly products: "/products";
//   };
//   readonly supportedLanguages: readonly ["en", "fr", "de"];
// }

در این مثال، شیء config، شیء تودرتوی endpoints آن و آرایه supportedLanguages همگی به عنوان readonly علامت‌گذاری شده‌اند. این تضمین می‌کند که هیچ بخشی از پیکربندی نمی‌تواند به طور تصادفی در زمان اجرا تغییر کند.

مثال ۵: تاییدهای Const با انواع بازگشتی توابع

شما می‌توانید از تاییدهای const برای اطمینان از اینکه یک تابع یک مقدار تغییرناپذیر را باز می‌گرداند، استفاده کنید. این امر به ویژه هنگام ایجاد توابع کمکی که نباید ورودی خود را تغییر دهند یا خروجی قابل تغییر تولید کنند، مفید است.


function createImmutableArray(items: T[]): readonly T[] {
  return [...items] as const;
}

const numbers = [1, 2, 3];
const immutableNumbers = createImmutableArray(numbers);

// نوع immutableNumbers: readonly [1, 2, 3]

// immutableNumbers[0] = 4; // خطا: امضای ایندکس در نوع 'readonly [1, 2, 3]' فقط اجازه خواندن می‌دهد.

موارد استفاده و سناریوها

مدیریت پیکربندی

تاییدهای Const برای مدیریت پیکربندی برنامه ایده‌آل هستند. با تعریف اشیاء پیکربندی خود با as const، می‌توانید اطمینان حاصل کنید که پیکربندی در طول چرخه حیات برنامه ثابت باقی می‌ماند. این از تغییرات تصادفی که می‌تواند منجر به رفتار غیرمنتظره شود، جلوگیری می‌کند.


const appConfig = {
  appName: "My Application",
  version: "1.0.0",
  apiEndpoint: "https://api.example.com",
} as const;

تعریف ثابت‌ها

تاییدهای Const همچنین برای تعریف ثابت‌ها با انواع لیترال خاص مفید هستند. این می‌تواند ایمنی نوع و وضوح کد را بهبود بخشد.


const HTTP_STATUS_OK = 200 as const; // نوع: 200
const HTTP_STATUS_NOT_FOUND = 404 as const; // نوع: 404

کار با Redux یا سایر کتابخانه‌های مدیریت وضعیت

در کتابخانه‌های مدیریت وضعیت مانند Redux، تغییرناپذیری یک اصل اساسی است. تاییدهای const می‌توانند به اعمال تغییرناپذیری در reducerها و action creatorهای شما کمک کرده و از جهش‌های تصادفی وضعیت جلوگیری کنند.


// مثال Redux reducer

interface State {
  readonly count: number;
}

const initialState: State = { count: 0 } as const;

function reducer(state: State = initialState, action: { type: string }): State {
  switch (action.type) {
    default:
      return state;
  }
}

بین‌المللی‌سازی (i18n)

هنگام کار با بین‌المللی‌سازی، شما اغلب مجموعه‌ای از زبان‌های پشتیبانی‌شده و کدهای محلی مربوط به آن‌ها را دارید. تاییدهای const می‌توانند تضمین کنند که این مجموعه تغییرناپذیر باقی می‌ماند و از افزودن یا تغییرات تصادفی که می‌تواند پیاده‌سازی i18n شما را مختل کند، جلوگیری می‌کند. به عنوان مثال، تصور کنید از زبان‌های انگلیسی (en)، فرانسوی (fr)، آلمانی (de)، اسپانیایی (es) و ژاپنی (ja) پشتیبانی می‌کنید:


const supportedLanguages = ["en", "fr", "de", "es", "ja"] as const;

type SupportedLanguage = typeof supportedLanguages[number]; // نوع: "en" | "fr" | "de" | "es" | "ja"

function greet(language: SupportedLanguage) {
  switch (language) {
    case "en":
      return "Hello!";
    case "fr":
      return "Bonjour!";
    case "de":
      return "Guten Tag!";
    case "es":
      return "¡Hola!";
    case "ja":
      return "こんにちは!";
    default:
      return "Greeting not available for this language.";
  }
}

محدودیت‌ها و ملاحظات

جایگزین‌های تاییدهای Const

در حالی که تاییدهای const ابزار قدرتمندی برای اعمال تغییرناپذیری هستند، رویکردهای دیگری نیز وجود دارد که می‌توانید در نظر بگیرید:

بهترین شیوه‌ها

نتیجه‌گیری

تاییدهای const در تایپ‌اسکریپت ابزاری ارزشمند برای اعمال تغییرناپذیری و بهبود ایمنی نوع در کد شما هستند. با استفاده از as const، می‌توانید به کامپایلر دستور دهید تا محدودترین نوع ممکن را برای یک مقدار استنتاج کرده و تمام خصوصیات را به عنوان readonly علامت‌گذاری کند. این می‌تواند به جلوگیری از تغییرات تصادفی، بهبود پیش‌بینی‌پذیری کد و فعال کردن بررسی نوع دقیق‌تر کمک کند. در حالی که تاییدهای const محدودیت‌هایی دارند، آنها یک افزودنی قدرتمند به زبان تایپ‌اسکریپت هستند و می‌توانند به طور قابل توجهی استواری برنامه‌های شما را افزایش دهند.

با گنجاندن استراتژیک تاییدهای const در پروژه‌های تایپ‌اسکریپت خود، می‌توانید کدی قابل اعتمادتر، قابل نگهداری‌تر و قابل پیش‌بینی‌تر بنویسید. قدرت استنتاج نوع تغییرناپذیر را بپذیرید و شیوه‌های توسعه نرم‌افزار خود را ارتقا دهید.

تاییدهای const در تایپ‌اسکریپت: استنتاج نوع تغییرناپذیر برای کدی استوار | MLOG